"""
 yield 和 return的区域
    yield 一直返回值，不会主动的终止函数，常用生成器当中
    return 只会返回一次值， 会主动终止函数
"""
# 定义一个生成器
def fib(n):
    a = 1
    for _ in range(n):
        a += 1
        #return a # 2
        yield a # 返回循环内每次a变化后的值
# 生成器的使用 和 next 函数
def gen1():
    c = fib(10) # c的数据类型是一个生成器 装有所有a的值 生成器本身也是一个序列
    print(c,type(c))
    ll = list(c) # 将生成器转换成列表
    print(ll)
    #遍历生成器
    for e in c:
        print(e,end=",")

    ff = fib(10)
    #next函数 一般和生成器一起使用，每执行一次，会返回一个yield的结果
    f = next(ff)
    print(f)
    f = next(ff)
    print(f)
    f = next(ff)
    print(f)
    f = next(ff)
    print(f)

def gen2():
    #利用生成式 去创建一个1-10的二次方列表
    list1 = [  x * x   for x in range(1,11)      ]
    print(list1)
    #练习题： 利用生成式的方式 去创建一个A1 - G5的生成器，并转换成元组 A1-A5 B1-B5... G1-G5
    t = (  m+n    for m in "ABCDEFG" for n in '12345'    )
    print(type(t)) #generator
    #generator 转换成 元组
    tu = tuple(t)
    print(tu)


if __name__ == '__main__':
    #gen1()
    gen2()
